"""
@project:作业.点歌.py
@author:zhujiahui
@IDE:PyCharm
@time:2021-08-20-23:10
"""
"""
类的继承(小练习)
自定义异常类:
●自定义异常能让异常更精准
●自定义异常类:当list内元素长度超过10的时候抛出异常
●自定义异常类:消息小于8时抛出异常
"""
# class InputError(Exception):
#     def __init__(self,length):
#         #检测list中元素长度是否超过10,或小于8
#         self.length = length
#     #设置异常描述信息
#     def __str__(self):
#         return f"您输入的list中元素为{self.length},请输入长度不小于8且不超过10的元素"
#
# def func():
#     list = []
#     try:
#         deom = input("请输入要添加到列表的元素：")
#         list.append(deom)
#         if 8 > len(deom) or len(deom) > 10:
#         #抛出异常类，创建对象！
#             raise InputError(len(deom))
#         #捕获异常！
#     except Exception as result:
#         print(result)
#     else:
#         print("没有异常，添加成功！")
#
# func()


# # #用类实现斐波拉契数列
class Fib():
    def __init__(self,big_num):
        self.a,self.b = 0,1      #a,b的值要时刻变化，初始化
        self.big_num = big_num
    def __iter__(self):          #实例本身就是迭代器，即返回自己
        return self
    def __next__(self):
        self.a,self.b=self.b,self.a+self.b
        if self.a > self.big_num:
            raise StopIteration
        else:
            return self.a         #返回下一个值

for i in Fib(10):
    print(i)





















# def fibonacci(num):
# #num表示生成斐波那契数列的个数
#     a = 0
#     b = 1
# #记录每次生成个数的索引
#     flag = 0
#     while flag < num:
#         result = a
#         a,b = b,b+a
#         flag += 1
#         yield result
#
# f = fibonacci(5)
# # ret = next(f)
# # print(ret)
# #for循环会主动代替next去执行，遇到报错自动退出
# #这个没有上限，递归有上限
# for i in f:
#     print(i)
